package com.wkbb.basic.service;

import com.github.pagehelper.PageInfo;
import com.wkbb.basic.model.Employee;
import com.wkbb.basic.vo.TeacherManageVo;
import com.wkbb.common.base.BaseService;
import com.wkbb.basic.vo.EmployeeEditInfoVo;
import com.wkbb.common.dto.ResultDTO;
import com.wkbb.common.dto.basic.EmployeeInfoDto;
import com.wkbb.common.dto.basic.UserDto;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author dengjingyuan
 * @date
 */
public interface TeacherManageService extends BaseService<Employee> {

    void updateMobile(EmployeeInfoDto employeeInfoDto) throws Exception;

    /**
     *
     * @param employeeInfoDto
     * @param createBy
     * @param isSendToXmppOrSendToDoor 是否要把用户信息同步到设备或者同步到门禁服务
     * @param isClearAddressBook 是否要清理通讯录缓存，批量导入的时候不要单个去清理缓存（已经存在的用户会被重复清理，性能低下）
     * @return
     */
    Long insertTeacher(EmployeeInfoDto employeeInfoDto, String createBy,Boolean isSendToXmppOrSendToDoor,Boolean isClearAddressBook);

    void updateTeacher(EmployeeInfoDto employeeInfoDto, String updateBy) throws Exception;

    /**
     * 更新学生信息
     *
     * @param employeeInfoDto 学生信息
     * @param updateBy        操作人
     * @param isBack          是否后台操作
     * @throws Exception 抛出异常
     */
    ResultDTO updateTeacher(EmployeeInfoDto employeeInfoDto, String updateBy, boolean isBack, boolean updateAccount) throws Exception;

    ResultDTO deleteTeacher(List<Long> ids, String deleteBy) throws Exception;

    EmployeeEditInfoVo getTeacherInfoById(Long id, UserDto userDto) throws Exception;

    PageInfo<EmployeeInfoDto> getTeacherInfoPageList(Map<String, Object> params, Integer pageNo, Integer pageSize) throws Exception;

    PageInfo<TeacherManageVo> getTeacherManageList(Map<String, Object> params, Integer pageNo, Integer pageSize);

    /**
     * 查询全校老师列表（去重）
     *
     * @param params 参数（orgId）
     * @return 全校老师列表
     */
    List<TeacherManageVo> getAllTeacherManageList(Map<String, Object> params);

    /**
     * 根据班级ID获取教师分页列表
     *
     * @param params   参数（学校ID,班级ID）
     * @param pageNo   页码
     * @param pageSize 每页条数
     * @return 教师分页列表
     * @throws Exception 抛出异常
     */
    PageInfo<EmployeeInfoDto> getEmployeeInfoPageByClassId(Map<String, Object> params, Integer pageNo, Integer pageSize) throws Exception;

    /**
     * 获取教师列表
     *
     * @param params 参数（学校ID,班级ID）
     * @return 教师列表
     * @throws Exception 抛出异常
     */
    List<EmployeeInfoDto> getEmployeeInfoList(Map<String, Object> params) throws Exception;

    /**
     * 根据班级ID获取任课教师列表
     *
     * @param params 参数（学校ID,班级ID）
     * @return 教师列表
     * @throws Exception 抛出异常
     */
    List<EmployeeInfoDto> getEmployeeInfoListByClassId(Map<String, Object> params) throws Exception;

    /**
     * 根据班级查询老师列表(包含班主任)
     *
     * @param params 参数（学校ID,班级ID）
     * @return 教师列表
     * @throws Exception 抛出异常
     */
    List<EmployeeInfoDto> getEmployeeInfoByClass(Map<String, Object> params) throws Exception;

    /**
     * 园长获取班级教师列表(包含园长)
     *
     * @param params 参数（学校ID,班级ID）
     * @return 教师列表
     * @throws Exception 抛出异常
     */
    List<EmployeeInfoDto> getEmployeeListBySchoolMaster(Map<String, Object> params) throws Exception;

    /**
     * 获取学校教师列表(包含园长)，排除非当前班级的班主任
     *
     * @param orgId   学校ID
     * @param classId 班级ID
     * @return 教师列表
     * @throws Exception 抛出异常
     */
    List<TeacherManageVo> getTeacherListExcludeOtherMaster(Long orgId, Long classId) throws Exception;

    List<EmployeeInfoDto> getAllEmployeeList(Long orgId);

    ResultDTO<Map<String,Object>> saveData(UserDto userDto, Long orgId, List<Object[]> data,String flag,Integer currentRow,Boolean isClearAddressBook) throws Exception;

    void changeUserType(EmployeeInfoDto employeeInfoDto, Employee employee)throws Exception;

    /**
     * 根据学校ID查询园长列表
     * @param params 学校ID
     * @return 园长信息列表
     */
    List<EmployeeInfoDto> getMasterEmployeeList(Map<String,Object> params);


    /**
     * 根据学校ID班级ID查询班主任信息
     * @param orgId 学校ID
     * @param classId 班级ID
     * @return 班主任信息
     */
    EmployeeInfoDto getClassMasterInfo(Long orgId, Long classId);

    /**
     * 删除当前用户学校身份删除人脸
     * @param orgId 学校ID
     * @param userId 用户ID
     */
    void deleteUserFaceByOrgId(Long userId, Long orgId) ;

    List<Long> getEmployeeListAll();

    List<Employee> getMasterByUserIds(List<Long> userIds);

    List<Employee> getFamilyListByUpdateTime(Long orgId, Date date);

    List<Object[]> exportTeacherExcel(Map<String, Object> params,Long orgId);

    Map<String, Object> getTeacherCount(Map<String, Object> params);

}
